#pragma once

#ifndef WINVER
#	define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT
#	define _WIN32_WINNT 0x0501
#endif
#ifndef _WIN32_WINDOWS
#	define _WIN32_WINDOWS 0x0410
#endif
#ifndef _WIN32_IE			
#	define _WIN32_IE 0x0600
#endif
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX

// STL
#include <string>
#include <unordered_map>
#include <map>
#include <cstdint>
// Boost
#ifdef _MSC_VER
#	pragma warning(push)
#	pragma warning(disable : 4512) // assignment operator cannot be generated
#	pragma warning(disable : 4267) // conversion from x to y, possible loss of data
#	pragma warning(disable : 4244) // 'argument' : conversion from 'type1' to 'type2'
#	pragma warning(disable : 4127) // conditional expression is constant
#	pragma warning(disable : 4121) // alignment of member was sensitive to packing
#	pragma warning(disable : 4100) // unreferenced formal parameter
#endif
#include <boost/shared_array.hpp>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>
#include <boost/signals.hpp>
#ifdef _MSC_VER
#	pragma warning(pop)
#endif
// Local
#ifdef _MSC_VER
#	pragma warning(push)
#	pragma warning(disable : 4231) // nonstandard extension used:  'extern' before template explicit instantiation
#endif
#include <core/Convert.hpp>
#include <core/Debug.h>
#include <core/Exception.h>
#include <vfs/VirtualFileSystem.h>
#include "resources.h"
#ifdef _MSC_VER
#	pragma warning(pop)
#endif
// Windows
#include <Windows.h>
#include <OAIdl.h>
#include <comip.h>
#include <ddraw.h>
#include <MMSystem.h>
